package com.woniuxy.shirotest;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.env.BasicIniEnvironment;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;

/**
 * description: ShiroPerm <br>
 * date: 2021/12/4 7:04 下午 <br>
 * author: shesaifei <br>
 * version: 1.0 <br>
 */
//授权
public class ShiroPerm {
    public static void main(String[] args) {
        //1、加载配置文件 init 来构建shiro的环境
        BasicIniEnvironment basicIniEnvironment = new BasicIniEnvironment("classpath:shiro-perm.ini");
        //2、通过环境来创建SecurityManage
        SecurityManager securityManager = basicIniEnvironment.getSecurityManager();
        //3、将SecurityManage，放入一个shiro的工具类中
        SecurityUtils.setSecurityManager(securityManager);
        //4.直接操作工具类 创建subject主体 !!!核心代码 我们一定要要有操作主体
        Subject subject = SecurityUtils.getSubject();

        //5、构造登录主体的凭证，提供用户和密码
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("mayun", "123456");
        //通过subject可以执行登录操作 登录后才能够进行权限判断
        subject.login(usernamePasswordToken);
        //来判断这个subject主体，是否能够认真成功
        System.out.println("是否能认证成功："+subject.isAuthenticated());
        System.out.println("当前登录的用户名是："+subject.getPrincipal());

        //只要第6步能够完成，那么就能进行权限判断(这里开始进行权限判断)
        boolean permitted = subject.isPermitted("user:update");
        System.out.println("该用户："+subject.getPrincipal()+"有没有user:save权限："+permitted);
    }
}
